package com.lzh.dlykserver.util;

import org.springframework.util.ObjectUtils;

import java.util.function.Consumer;
import java.util.function.Supplier;

public class CacheUtils {

    /**
     * 带有缓存的查询工具方法
     * @param cacheSelector
     * @param databaseSelector
     * @param saveCache
     * @param <T>
     * @return
     */
    public static <T> T getCacheData(Supplier<T> cacheSelector, Supplier<T> databaseSelector, Consumer<T> saveCache) {
        // 首先从redis中选择数据
        T data = cacheSelector.get();
        // 如果redis中没有
        if (ObjectUtils.isEmpty(data)) {
            //从数据库中查询
            data = databaseSelector.get();
            //数据库查到了数据
            if (!ObjectUtils.isEmpty(data)) {
                //存入redis中
                saveCache.accept(data);
            }
        }
        //返回数据
        return data;
    }

}
